library(tidyverse) # metapackw_index of all tidyverse packw_indexs
list.files(path = "../input")
#环节一： 编写一个函数，以自己的姓名命名，函数的形式参数n是一个整数型向量，该函数的功能为返回该向量中所有偶数元素之和。然后调用此函数，传入1:100，计算并打印出1:100中的偶数之和。
#此环节分值为：15分。注意：不使用自己名字作为函数名不得分
myname <- function(x){
    sum <- 0
    i <- 1
    while(i<=length(x)){
        if (x[i] %% 2==0){
            sum = sum + i
        }
        i <- i+1
    }
    sum
}
myname(c(1:100))

#环节二：Titanic是R的一个内置数据集，它分别以“性别”、“年龄”“舱位”“是否生存”为维度提供了泰坦尼克沉船事故中最终存活和死亡人数数据。
#1.请绘制饼图，标题为自己的姓名，直观展现泰坦尼克号上不同舱位的乘客和船员的比例。
#2.请绘制层叠柱状图，其中横坐标应为舱位，纵坐标应为生存和死亡人数，并为最终生存结果设置不同颜色，来直观的显示泰坦尼克号沉船事故中，舱位（Class）的影响（可参照课本对性别（Sex）因素和生存结果的绘制）。图形的标题为自己的姓名，请给图形加上图例。然后根据图形判断，在此次事故中，乘坐舱位的不同是否会导致最终生存的概率不同。
#此环节分值为：15分。注意：不使用自己信息作为标题不得分。
data("Titanic")
pie(apply(Titanic,1,sum),c("1st","2nd","3rd","Crew"), main = "myname")
mat <- apply(Titanic,c(4,1),sum)
mat
barplot (mat,main="myname",col=c("green","blue"),legend=c("died","survied"),names=c("1st","2nd","3rd","Crew"))

#环节三：创建一个用来记录某部门员工信息的S3类，类名以自己的名字的全拼+S3命名, 包含的属性分别是：员工姓名、工号、月薪。给该类设计一个泛型函数tax()，返回该员工每月需要缴纳的税额。然后创建对象，调用泛型函数得出税额。（纳税标准为：5000以下不计税，5000以上以5%计税）。之后用相同属性创建相同的引用类，类名以自己的名字的全拼+Ref命名,并用类中定义的方法tax()计算税额。然后创建对象测试该引用类。
#此环节分值为：20分。注意：不使用自己信息创建类不得分。
# 创建类
mynameS3 <- function(n,i,m)
{
  value <- list(name=n,id=i,money=m)
  attr (value,"class") <- "mynameS3"
  return (value)
}
tax<-function(obj) UseMethod("tax")
tax.mynameS3<-function(obj){
  if(obj$money<=5000){
    return(0)
  }else{
    return(obj$money*0.05)
  }
}
s1 <-mynameS3("pudding2",2020,5600)
s1
tax(s1)
skl <- setRefClass ("mynameRef",
               fields=list(name="character",id="numeric",money="numeric"),
                    methods =list(tax<-function(obj) UseMethod("tax"),
                    tax.mynameRef<-function(obj){
                       if(obj$money<=5000){
                         return(0)
                        }else{
                          return(obj$money*0.05)
                        }
                      })
)                   
s2 <- skl(name="pudding",id=20201,money=5634)                    
tax(s2)



#环节四：一家电器销售公司的管理人员认为，每月的销售收入是广告费用的函数，他们想通过广告费用对月销售收入做出估计，下面是近8个月的销售收入与广告费用数据：
#（1）用电视广告费用和报纸广告费用作自变量，建立估计的回归方程，模型请以自己的姓名命名，并说明回归系数的意义。
#（2）计算该回归模型的判定系数
#（3）给定电视广告费用为30万元，报纸广告费用为20万元，求月销售收入95%的置信区间和预测区间
#此环节分值为:20分。注意：模型不按要求命名不得分。
library(mlbench)
电视广告费用<- c(50,20,40,25,30,35,25,30)
报纸广告费用<- c(15,20,15,25,33,23,42,25)
月销售收入<- c(960,900,950,920,950,940,940,940)
xiaoshou <- data.frame(月销售收入,电视广告费用,报纸广告费用,stringsAsFactors=F)
xiaoshou

myname<-lm(月销售收入~电视广告费用+报纸广告费用,data=xiaoshou)
summary(myname) 
summary(myname)$r.squared  

confidence<-data.frame(电视广告费用=30,报纸广告费用=20)
confidence
predict(myname,confidence,interval="confidence") #置信区间
predict(myname,confidence,interval="predict") #预测区间

#环节五：附件中的diabetes.csv文件包含了768名患者的生理状况信息，具体字段解释如下：
#请以“是否患糖尿病”作为因变量，随机将数据集划分为训练集和测试集，使用学过的任意一种分类方法对训练集建立模型，模型请以自己的姓名命名，然后使用该模型对测试集进行预测，并进行结果比对得到混淆矩阵和准确率。
#此环节分值为:30分。注意：模型不按要求命名不得分。
library(randomForest)
shuju<-read.csv("diabetes.csv",header = TRUE,stringsAsFactors = F)
set.seed(6958)
index <- sample(2,nrow(shuju),replace = TRUE,prob=c(0.8,0.2)) #将训练集和测试集划分占比为0.8和0.2
train <- shuju[index==1,]
test <- shuju[index==2,]
myname<-randomForest(as.factor(Outcome)~.,data=train,ntree=1000,proximity=TRUE)  #建立模型，Outcome为因变量，其余皆为自变量。建立一千颗树
myname